package es.uned.ii.si3.dao;


import java.sql.PreparedStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import es.uned.ii.si3.model.Rol;

public class RolDAOImpl implements RolDAO{


	public RolDAOImpl() {
		
	}
	
	
	/* getAllRoles devuelve una lista de todos los roles disponibles */
	public List<Rol> getAllRoles() {
		
		Connection conn = ConnectionFactory.getConnection();
		List<Rol> listaRoles = new ArrayList<Rol>();
		PreparedStatement pstmt = null;
		ResultSet resultado = null;
		
		try {
			pstmt = conn.prepareStatement("SELECT * FROM roles");
			resultado = pstmt.executeQuery();
			
			while (resultado.next()){
				Rol rol = new Rol();
				rol.setIdRol(resultado.getInt("idRol"));
				rol.setDescripcion(resultado.getString("descripcion"));
				
				listaRoles.add(rol);
			}
		} catch (SQLException e) {
			listaRoles = null;
		} finally {
			try {
				resultado.close();
				resultado = null;
			} catch (Exception e) { }
			
			try {
				pstmt.close();
				pstmt = null; 
			} catch (Exception e) { }
		}
		
		ConnectionFactory.release(conn);
		return listaRoles;
	}
	
	
	/* getRol devuelve una rol identificandolo previamente por su id*/
	public Rol getRol(int id) {
		
		Connection conn = ConnectionFactory.getConnection();
		Rol rol = null;
		PreparedStatement pstmt = null;
		ResultSet resultado = null;
		
		try {
			pstmt = conn.prepareStatement("SELECT * FROM roles WHERE idRol=?");
			pstmt.setInt(1, id);
			resultado = pstmt.executeQuery();
			
			if (resultado.next()){
				rol = new Rol();
				rol.setIdRol(resultado.getInt("idRol"));
				rol.setDescripcion(resultado.getString("descripcion"));
			}
		} catch (SQLException e) {
			rol = null;
		} finally {
			try {
				resultado.close();
				resultado = null;
			} catch (Exception e) { }
			
			try {
				pstmt.close();
				pstmt = null; 
			} catch (Exception e) { }
		}
		
		ConnectionFactory.release(conn);
		return rol;
	}

}
